EVI – Enhanced Vegetation Index

EVI is an advanced vegetation index designed to improve sensitivity over high biomass areas and reduce atmospheric and soil background effects by using the blue band in addition to red and NIR.

1. Scientific Definition

The Enhanced Vegetation Index (EVI) is a spectral vegetation index that enhances the signal in high biomass regions and improves the separation between vegetation and soil/background. It uses the Near-InfraRed (NIR), Red, and Blue bands with correction coefficients to reduce atmospheric and background effects.

Formula

A common formulation of EVI is:

EVI = G × (NIR − Red) / (NIR + C1 × Red − C2 × Blue + L) Dimensionless (–1 to +1)

Where typical coefficient values are:

  • G (gain factor) = 2.5
  • L (canopy background) = 1.0
  • C1 = 6.0 (aerosol resistance term for red band)
  • C2 = 7.5 (aerosol resistance term for blue band)

Typical Interpretation

EVI Range Interpretation
< 0.0 Water, clouds, snow, non-vegetated bright surfaces
0.0 – 0.2 Bare soil, rocks, built-up, or very sparse vegetation
0.2 – 0.5 Moderate vegetation (grassland, shrubs, mixed cover)
> 0.5 Dense and healthy vegetation (croplands, forests with high biomass)

Key Applications

  • Monitoring dense and high-biomass vegetation
  • Detecting vegetation changes in tropical forests and humid regions
  • Complementing NDVI where saturation occurs in dense canopies
  • Crop monitoring, yield estimation, and vegetation phenology

2. Data & Bands for EVI

Common Sensors & Bands

  • Sentinel-2 (ESA) – 10 m
    • Blue: B2 (~490 nm)
    • Red: B4 (~665 nm)
    • NIR: B8 (~842 nm)
  • Landsat 8/9 OLI – 30 m
    • Blue: B2
    • Red: B4
    • NIR: B5

Good Practice

  • Use atmospherically corrected surface reflectance products.
  • Filter out cloudy scenes using appropriate cloud masks or cloud percentage.
  • Clip the final EVI raster to your Area of Interest (AOI) before exporting.
  • Use consistent dates when comparing EVI time series or multi-year analyses.

Palette Suggestion

A sample EVI color palette similar to NDVI: [ "#440154", "#3b528b", "#21908c", "#5dc963", "#fde725" ]

3. Google Earth Engine Code – EVI for Any AOI

Steps: open code.earthengine.google.com → New Script → paste the code → draw your AOI as geometry on the map → click Run. Then export EVI as GeoTIFF to Google Drive.

// EVI for any Area of Interest (AOI) using Sentinel-2 SR
// -------------------------------------------------------
// 1) Go to: https://code.earthengine.google.com
// 2) Click "New Script" and paste this code.
// 3) On the map: draw your AOI (Polygon/Rectangle).
//    It will appear as a variable named 'geometry' in the left panel.
// 4) Click "Run" to display EVI.
// 5) In the Tasks tab, click "Run" to export EVI to Google Drive.

// -------------------------------------------------------
// 1. Define Area of Interest (AOI)
// -------------------------------------------------------
var roi = geometry;  // Make sure a 'geometry' object exists in the left panel

// Center the map on the AOI
Map.centerObject(roi, 11);

// -------------------------------------------------------
// 2. Define time range
// -------------------------------------------------------
var startDate = '2023-01-01';
var endDate   = '2023-12-31';

// -------------------------------------------------------
// 3. Load Sentinel-2 Surface Reflectance collection
//    and keep only bands needed for EVI
// -------------------------------------------------------
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
  .select(['B2', 'B4', 'B8']);  // Blue, Red, NIR

// Create a median composite and clip to AOI
var image = s2.median().clip(roi);

// -------------------------------------------------------
// 4. Compute EVI
// EVI = G * (NIR - Red) / (NIR + C1*Red - C2*Blue + L)
// Using: G=2.5, L=1, C1=6, C2=7.5
// -------------------------------------------------------
var G  = 2.5;
var C1 = 6.0;
var C2 = 7.5;
var L  = 1.0;

var evi = image.expression(
  'G * (NIR - RED) / (NIR + C1 * RED - C2 * BLUE + L)',
  {
    'G':    G,
    'C1':   C1,
    'C2':   C2,
    'L':    L,
    'NIR':  image.select('B8'),
    'RED':  image.select('B4'),
    'BLUE': image.select('B2')
  }
).rename('EVI');

// -------------------------------------------------------
// 5. Visualization on the map
// -------------------------------------------------------
var eviVis = {
  min: -1,
  max: 1,
  palette: [
    '#440154', // low
    '#3b528b',
    '#21908c',
    '#5dc963',
    '#fde725'  // high
  ]
};

// Add EVI layer to the map
Map.addLayer(evi, eviVis, 'EVI (Sentinel-2)', true);

// Optionally, also show a true color composite for context
var s2_rgb = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
  .select(['B4','B3','B2'])  // RGB
  .median()
  .clip(roi);

Map.addLayer(s2_rgb, {min:0, max:3000}, 'True Color (RGB)', false);

// -------------------------------------------------------
// 6. Export EVI as GeoTIFF to Google Drive
// -------------------------------------------------------
Export.image.toDrive({
  image: evi,
  description: 'EVI_Export',
  fileNamePrefix: 'EVI_Export',
  region: roi,
  scale: 10,       // Sentinel-2 resolution
  crs: 'EPSG:4326',
  maxPixels: 1e13
});

// End of script